Gerenciamento de Contatos V1
Aqui temos um exemplo de projeto utilizando Classes e Arraylist. No próximo artigo temos uma sequência de vídeos exemplicando o funcionamento do código.
classe Pessoa.java
public class Pessoa {
public static int contador;
private int id;
private String nome;
private String telefone;
private String email;
//construtor da classe pessoa
public Pessoa(String nome, String telefone, String email) {
contador++;
this.id = contador;
setNome(nome);
setTelefone(telefone);
setEmail(email);
}
public int getId() {
return id;
}
public void setNome(String nome) {
//aqui implementariamos as validações necessárias
//antes de inserir o nome
this.nome = nome;
}
public String getNome() {
return nome;
}
public void setTelefone(String telefone) {
//aqui implementariamos as validações necessárias
//antes de inserir o telefone
this.telefone = telefone;
}
public String getTelefone() {
return telefone;
}
public void setEmail(String email) {
//aqui implementariamos as validações necessárias
//antes de inserir o email
this.email = email;
}
public String getEmail() {
return email;
}
//cria o método toString para sobrescrever através do @overrride "annotations" utilizado
// para converter o objeto para string
//quando for necessário imprimir os dados do objeto na tela por outra parte do nosso
//programa.
@Override
public String toString() {
return "ID: " + id + ", Nome: " + nome + ", Telefone: " + telefone + ", Email: " + email;
}
}
Classe App.java
import java.util.ArrayList;
import java.io.IOException;
import java.util.Scanner;
public class App {
//Aqui definimos a lista contatos e teclado como variaveis globais
//pois já estamos utilizando a orientação a objetos para ter uma melhor
//separação não sendo necessário termos tanta proteção às variaveis do
//programa principal
private static ArrayList<Pessoa> listaContatos = new ArrayList<Pessoa>();
private static Scanner teclado = new Scanner(System.in);
public static void main(String[] args) {
//guarda a opcao selecionada pelo usuario no menu
int opcao;
do {
limparTela();
//obtem a opcao desejada pelo usuario
opcao = obterEscolhaMenu();
//executa a funcionalidade conforme escolhido pelo usuario
processarEscolhaMenu(opcao);
} while (opcao != 5);
}
private static void processarEscolhaMenu(int opcao){
switch (opcao) {
case 1:
incluirContato();
pausa();
break;
case 2:
alterarContato();
break;
case 3:
consultarContatos();
break;
case 4:
excluirContato();
pausa();
break;
case 5:
System.out.println("Saindo do sistema...");
break;
default:
System.out.println("Opção inválida. Tente novamente.");
}
}
private static int obterEscolhaMenu(){
int opcao;
System.out.println("\n--- Menu de Gerenciamento de Contatos ---\n");
System.out.println("1. Incluir Contato");
System.out.println("2. Alterar Contato");
System.out.println("3. Consultar Contatos");
System.out.println("4. Excluir Contato");
System.out.println("5. Sair");
System.out.print("\nEscolha uma opção: ");
opcao = teclado.nextInt();
teclado.nextLine(); // Limpeza buffer
return opcao;
}
private static void incluirContato() {
System.out.print("Digite o nome: ");
String nome = teclado.nextLine();
System.out.print("Digite o telefone: ");
String telefone = teclado.nextLine();
System.out.print("Digite o email: ");
String email = teclado.nextLine();
Pessoa novaPessoa = new Pessoa(nome, telefone, email);
listaContatos.add(novaPessoa);
System.out.println("Contato incluído com sucesso!");
}
private static void alterarContato() {
System.out.print("Digite o ID do contato a ser alterado: ");
int id = teclado.nextInt();
teclado.nextLine(); // limpeza buffer
limparTela();
//busca a pessoa especificada pelo id
Pessoa pessoa = encontrarContatoPorId(id);
if (pessoa != null) {
System.out.print("Digite o novo nome (ou deixe em branco para manter): ");
String nome = teclado.nextLine();
//metodo isBlank retorna true se a string estiver vazia
//é equivalente a fazer nome.equals("");
if (!nome.isBlank())
pessoa.setNome(nome);
System.out.print("Digite o novo telefone (ou deixe em branco para manter): ");
String telefone = teclado.nextLine();
if (!telefone.isBlank())
pessoa.setTelefone(telefone);
System.out.print("Digite o novo email (ou deixe em branco para manter): ");
String email = teclado.nextLine();
if (!email.isBlank())
pessoa.setEmail(email);
System.out.println("Contato alterado com sucesso!");
} else {
System.out.println("Contato não encontrado.");
pausa();
}
}
private static void consultarContatos() {
//metodo isEmpty verifica se a lista esta vazia
if (listaContatos.isEmpty()) {
System.out.println("Nenhum contato cadastrado.");
} else {
System.out.println("\n--- Lista de Contatos ---");
for (Pessoa pessoa : listaContatos) {
System.out.println(pessoa);
}
}
pausa();
}
private static void excluirContato() {
//obtem o id do contato;
System.out.print("Digite o ID do contato a ser excluído: ");
int id = teclado.nextInt();
teclado.nextLine(); // Consumir quebra de linha
//encontra o contato
Pessoa pessoa = encontrarContatoPorId(id);
//excluir o contato
if (pessoa != null) {
listaContatos.remove(pessoa);
System.out.println("Contato excluído com sucesso!");
} else {
System.out.println("Contato não encontrado.");
}
}
private static Pessoa encontrarContatoPorId(int id) {
//varre o array list para encontrar o id pesquisado
for (Pessoa pessoa : listaContatos) {
if (pessoa.getId() == id) {
//encontrou retorna o objeto pessoa
return pessoa;
}
}
//se chegou até aqui não existe este id
return null;
}
private static void limparTela(){
try {
if (System.getProperty("os.name").contains("Windows"))
new ProcessBuilder("cmd", "/c", "cls").inheritIO().start().waitFor();
else
new ProcessBuilder("clear").inheritIO().start().waitFor();
} catch (IOException | InterruptedException ex) {}
}
private static void pausa(){
System.out.println("\nTecle ENTER para continuar.");
teclado.nextLine();
}
}
A seguir temos um versão modificada da classe App.java, utilizando o conceito de ENUM para melhorar o código no que se refere ao uso de "códigos mágicos" para processar os itens
do menu.
import java.util.ArrayList;
import java.io.IOException;
import java.util.Scanner;
public class App {
// ===== ENUM EMBUTIDO =====
private enum MenuOpcao {
INCLUIR(1, "Incluir Contato"),
ALTERAR(2, "Alterar Contato"),
CONSULTAR(3, "Consultar Contatos"),
EXCLUIR(4, "Excluir Contato"),
SAIR(5, "Sair");
private final int codigo;
private final String descricao;
MenuOpcao(int codigo, String descricao) {
this.codigo = codigo;
this.descricao = descricao;
}
public int getCodigo() {
return codigo;
}
public String getDescricao() {
return descricao;
}
public static MenuOpcao fromCodigo(int codigo) {
for (MenuOpcao opcao : values()) {
if (opcao.codigo == codigo) {
return opcao;
}
}
return null;
}
}
// ===== VARIÁVEIS GLOBAIS =====
private static ArrayList listaContatos = new ArrayList<>();
private static Scanner teclado = new Scanner(System.in);
public static void main(String[] args) {
MenuOpcao opcao;
do {
limparTela();
opcao = obterEscolhaMenu();
processarEscolhaMenu(opcao);
} while (opcao != MenuOpcao.SAIR);
}
private static void processarEscolhaMenu(MenuOpcao opcao) {
if (opcao == null) {
System.out.println("Opção inválida. Tente novamente.");
pausa();
return;
}
switch (opcao) {
case INCLUIR:
incluirContato();
pausa();
break;
case ALTERAR:
alterarContato();
break;
case CONSULTAR:
consultarContatos();
break;
case EXCLUIR:
excluirContato();
pausa();
break;
case SAIR:
System.out.println("Saindo do sistema...");
break;
}
}
private static MenuOpcao obterEscolhaMenu() {
System.out.println("\n--- Menu de Gerenciamento de Contatos ---\n");
for (MenuOpcao opcao : MenuOpcao.values()) {
System.out.println(opcao.getCodigo() + ". " + opcao.getDescricao());
}
System.out.print("\nEscolha uma opção: ");
int codigo = teclado.nextInt();
teclado.nextLine(); // limpar buffer
return MenuOpcao.fromCodigo(codigo);
}
// ===== FUNCIONALIDADES =====
private static void incluirContato() {
System.out.print("Digite o nome: ");
String nome = teclado.nextLine();
System.out.print("Digite o telefone: ");
String telefone = teclado.nextLine();
System.out.print("Digite o email: ");
String email = teclado.nextLine();
Pessoa novaPessoa = new Pessoa(nome, telefone, email);
listaContatos.add(novaPessoa);
System.out.println("Contato incluído com sucesso!");
}
private static void alterarContato() {
System.out.print("Digite o ID do contato a ser alterado: ");
int id = teclado.nextInt();
teclado.nextLine();
limparTela();
Pessoa pessoa = encontrarContatoPorId(id);
if (pessoa != null) {
System.out.print("Digite o novo nome (ou deixe em branco): ");
String nome = teclado.nextLine();
if (!nome.isBlank()) pessoa.setNome(nome);
System.out.print("Digite o novo telefone (ou deixe em branco): ");
String telefone = teclado.nextLine();
if (!telefone.isBlank()) pessoa.setTelefone(telefone);
System.out.print("Digite o novo email (ou deixe em branco): ");
String email = teclado.nextLine();
if (!email.isBlank()) pessoa.setEmail(email);
System.out.println("Contato alterado com sucesso!");
} else {
System.out.println("Contato não encontrado.");
pausa();
}
}
private static void consultarContatos() {
if (listaContatos.isEmpty()) {
System.out.println("Nenhum contato cadastrado.");
} else {
System.out.println("\n--- Lista de Contatos ---");
for (Pessoa pessoa : listaContatos) {
System.out.println(pessoa);
}
}
pausa();
}
private static void excluirContato() {
System.out.print("Digite o ID do contato a ser excluído: ");
int id = teclado.nextInt();
teclado.nextLine();
Pessoa pessoa = encontrarContatoPorId(id);
if (pessoa != null) {
listaContatos.remove(pessoa);
System.out.println("Contato excluído com sucesso!");
} else {
System.out.println("Contato não encontrado.");
}
}
private static Pessoa encontrarContatoPorId(int id) {
for (Pessoa pessoa : listaContatos) {
if (pessoa.getId() == id) {
return pessoa;
}
}
return null;
}
private static void limparTela() {
try {
if (System.getProperty("os.name").contains("Windows"))
new ProcessBuilder("cmd", "/c", "cls").inheritIO().start().waitFor();
else
new ProcessBuilder("clear").inheritIO().start().waitFor();
} catch (IOException | InterruptedException e) {}
}
private static void pausa() {
System.out.println("\nTecle ENTER para continuar.");
teclado.nextLine();
}
}